// 枚举类型(Enum)  
// - 给每一个变量一个更好的名字, 见名知意
// - 一个枚举中只可能出现固定的几个值, 不会出现超出范围的可能性


export {}

// const PostStatus = {
//     Draft: 0,
//     Unpublished: 1,
//     Published: 2
// }

// enum PostStatus {
//     Draft = 0,
//     Unpublished = 1,
//     Published = 2,
// }

// 不指定默认值从0开始累加
// eq: Draft = 0, Unpublished = 1 Published = 2
// enum PostStatus {
//     Draft,
//     Unpublished,
//     Published,
// }

// 指定初始的默认值 从初始值开始累加
// eq: Draft = 6, Unpublished = 7 Published = 8
const enum PostStatus {
    Draft = 6,
    Unpublished,
    Published,
}

// 如果枚举类型值是字符串就无法累加, 必须指定每个枚举值
const enum PostStatusStr {
    Draft = 'aaa',
    Unpublished = 'ddd',
    Published = 'ggg',
}

const post = {
    title: 'Hello TS',
    content: 'TS is a typed superset of JavaScript.',
    status: PostStatus.Draft//2, //0 草稿 1 未发布 2 已发布
}




// 枚举类型会入侵到运行代码
// 编译之后会生成一个双向键值对对象 
// 可以通过键获取值 也可以通过值获取键
// var PostStatus;
// (function (PostStatus) {
//     PostStatus[PostStatus["Draft"] = 6] = "Draft";
//     PostStatus[PostStatus["Unpublished"] = 7] = "Unpublished";
//     PostStatus[PostStatus["Published"] = 8] = "Published";
// })(PostStatus || (PostStatus = {}));

// 作用: 可以通过索引获取值
// PostStatus[6] //=> Draft
// console.log(PostStatus[6])


// 如果想去掉这种双向键值对对象 在枚举声明之前加上const
// 编译之后就会消除, 枚举值会在注释中指出
// var post = {
//     title: 'Hello TS',
//     content: 'TS is a typed superset of JavaScript.',
//     status: 6 /* Draft */ //2, //0 草稿 1 未发布 2 已发布
// };













